set(
        FORMAT_PATTERNS
        source/*.cpp source/*.hpp
        include/*.hpp
        test/*.cpp test/*.hpp
        example/*.cpp example/*.hpp
        CACHE STRING
        "; separated patterns relative to the project source dir to format"
)

set(FORMAT_COMMAND clang-format CACHE STRING "Formatter to use")

add_custom_target(
        format-check
        COMMAND "${CMAKE_COMMAND}"
        -D "FORMAT_COMMAND=${FORMAT_COMMAND}"
        -D "PATTERNS=${FORMAT_PATTERNS}"
        -P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
        WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
        COMMENT "Linting the code"
        VERBATIM
)

add_custom_target(
        format-fix
        COMMAND "${CMAKE_COMMAND}"
        -D "FORMAT_COMMAND=${FORMAT_COMMAND}"
        -D "PATTERNS=${FORMAT_PATTERNS}"
        -D FIX=YES
        -P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
        WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
        COMMENT "Fixing the code"
        VERBATIM
)
